import java.util.Scanner;

public class day4 {
    /**
     * 动态规划
     * DP13 [NOIP2002 普及组] 过河卒
     * https://www.nowcoder.com/practice/cc1a9bc523a24716a117b438a1dc5706?tpId=230&tqId=40428&ru=/exam/oj
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int x = in.nextInt();
        int y = in.nextInt();
        // n和m 是马的位置，那么正常的到n,m 位置的话，需要火绒一行一列，相当于原来的数组为int[n + 1][m + 1]
        // dp需要 往外扩容一行一列，那么就是需要 n + 2,m + 2
        long[][] dp = new long[n + 2][m + 2];
        dp[0][1] = 1;
        x += 1;
        y += 1;
        for(int i = 1;i <= n + 1;i++) {
            for(int j = 1;j <= m + 1;j++) {
                // 把马位置和马能跳到的位置，dp设置为0
                if(i != x && j != y && Math.abs(i - x) +Math.abs(j -y) == 3 || (i == x && j == y)) {
                    dp[i][j] = 0;
                }else {
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }
        System.out.print(dp[n + 1][m + 1]);
    }


    /**
     * 贪心
     * DP30 买卖股票的最好时机(一)
     * https://www.nowcoder.com/practice/351b87e53d0d44928f4de9b6217d36bb?tpId=230&tqId=39767&ru=/exam/oja
     */
    public static void main1(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int ret = 0;
        // 以每次输入的值为卖出点，之后在前面输入的值中，记录下最小值作为买入点，
        // 之后每次进行判断这个 利润之后，把当前的卖出点和 最小值进行比较，看是否需要进行更新最小值
        int minBuy = 0x3f3f3f3f;
        for(int i = 0;i < n;i++) {
            int sale = in.nextInt();
            ret = Math.max(ret,sale - minBuy); // 最大利润
            // 更新 minBuy
            minBuy = Math.min(minBuy,sale);
        }
        System.out.print(ret);
    }

    /**
     * 中心扩散法
     * OR26 最长回文子串
     * https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af?tpId=182&tqId=34752&ru=/exam/oj
     */
    public int getLongestPalindrome (String A) {
        // 中心扩展法
        int n = A.length();
        int ret = 0;
        // 1. 遍历字符串，以每一个位置作为回文串的中心点
        for(int i = 0;i < n;i++) {
            // 2. 每一个中心点 都需要遍历两遍
            // 第一遍，以回文串长度为奇数进行遍历
            int left = i - 1,right = i + 1;
            while(left >= 0 && right < n && A.charAt(left) == A.charAt(right)) {
                left--;
                right++;
            }
            // 计算以回文串长度为奇数进行遍历的长度
            ret = Math.max(ret,(right - left - 1));

            // 第二遍，以回文串长度为偶数进行遍历
            left = i;
            right = i + 1;
            while(left >= 0 && right < n && A.charAt(left) == A.charAt(right)) {
                left--;
                right++;
            }
            ret = Math.max(ret,(right - left - 1));
        }
        return ret;
    }
}
